Machine Learning · PoliMI

Support Vector Machines

Capitolo 7
≈ 52 min di lettura · 11362 parole
Importanza per l'esame: 5/5

★★★★★ La tipologia numerica più frequente in assoluto: 9 esercizi da 4 punti su support vector, calcolo di w, b e margine, più 3 domande aperte e 4 blocchi di vero/falso.

Le Support Vector Machines (SVM) sono la tecnica più popolare della famiglia dei metodi kernel introdotta nel capitolo precedente, e nascono per risolverne il difetto principale: il costo di soluzioni che dipendono da tutti i campioni del training set. L’idea è duplice. Da un lato si cambia il criterio con cui si sceglie l’iperpiano separatore: non una separazione qualsiasi, come nel perceptron, ma quella che massimizza il margine, cioè la distanza dai punti più vicini. Dall’altro, la matematica di questo criterio (un problema di ottimizzazione quadratica, risolto passando per la dualità lagrangiana) produce gratuitamente due proprietà preziose: la soluzione si scrive solo in termini di kernel, quindi eredita tutta la potenza dei metodi kernel, ed è sparsa, cioè dipende solo da un piccolo sottoinsieme di campioni detti support vector. Il capitolo sviluppa l’intera catena: definizione del margine, formulazione primale, passaggio al duale con moltiplicatori di Lagrange e condizioni KKT, ruolo dei support vector, confini non lineari tramite kernel, estensione soft margin per dati non separabili, addestramento pratico, estensioni multi-classe e a regressione. Chiude una sezione di esercizi svolti in stile esame, con la procedura meccanica per trovare support vector, pesi e margine di un piccolo dataset: la tipologia numerica più frequente negli esami del corso.

Riferimenti sul testo: Bishop, Pattern Recognition and Machine Learning, capitolo 7 (7.1, 7.1.1, 7.1.3, 7.1.4) e Appendice E per i moltiplicatori di Lagrange.

1. Dai metodi kernel alle macchine kernel sparse#

1.1 Il problema: soluzioni che dipendono da tutti i campioni#

Il capitolo sui metodi kernel ha mostrato come sia possibile lavorare implicitamente in feature space enormi, anche a dimensionalità infinita, senza mai calcolare esplicitamente le feature: basta saper calcolare la funzione kernel k(x,x)=ϕ(x)Tϕ(x)k(\mathbf{x}, \mathbf{x}') = \boldsymbol{\phi}(\mathbf{x})^T \boldsymbol{\phi}(\mathbf{x}'). Il prezzo di questa potenza è però rimasto in sospeso. Per addestrare un modello kernel serve la matrice di Gram, la matrice N×NN \times N dei kernel tra tutte le coppie di campioni; e la soluzione trovata, per esempio nella kernel ridge regression, è una combinazione che coinvolge tutti gli NN campioni del training set: il vettore dei coefficienti duali ha una componente per campione, non per feature. Ogni predizione su un punto nuovo richiede quindi di valutare il kernel tra quel punto e ogni campione del training set. Con NN grande, sia l’addestramento sia l’inferenza diventano computazionalmente proibitivi.

1.2 L’obiettivo: sparsità#

Idea chiave: mantenere il vantaggio dei kernel (modelli molto espressivi senza calcolare le feature) eliminando il costo: cercare soluzioni in cui la maggior parte dei coefficienti duali è esattamente zero, così che solo pochi campioni contribuiscano alla predizione.

I metodi che realizzano questo programma si chiamano sparse kernel machines: trovano soluzioni che dipendono solo da un sottoinsieme dei campioni di training. I due rappresentanti più noti sono le Support Vector Machines e le Relevance Vector Machines (RVM); il corso si concentra sulle prime, di gran lunga le più diffuse. Nelle SVM i pochi campioni con coefficiente non nullo hanno un nome e un’interpretazione geometrica precisa: sono i support vector, i punti che “sostengono” la superficie di separazione.

In parole semplici: i metodi kernel puri sono come un comitato in cui ogni singolo dato del training set ha diritto di parola a ogni decisione: potentissimo ma lentissimo. Le SVM riducono il comitato ai soli membri davvero informativi, quelli al confine tra le classi, e ignorano tutti gli altri.

2. Non tutte le separazioni sono uguali: il margine#

2.1 Richiami: la geometria del discriminante lineare#

Il punto di partenza delle SVM è il modello del perceptron, già studiato nella parte sulla classificazione lineare. Il classificatore è

t^(x)=sign(y(x)),y(x)=wTϕ(x)+b\hat{t}(\mathbf{x}) = \text{sign}\big( y(\mathbf{x}) \big), \qquad y(\mathbf{x}) = \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}) + b

con target codificati come tn{1,+1}t_n \in \{-1, +1\}. La superficie di decisione è il luogo y(x)=0y(\mathbf{x}) = 0, un iperpiano nel feature space, e valgono le proprietà geometriche già derivate:

La geometria del discriminante lineare. La superficie di decisione (in rosso) è ortogonale a \mathbf{w}; la sua distanza dall’origine vale -w_0/\lVert\mathbf{w}\rVert e la distanza con segno di un punto \mathbf{x} dalla superficie vale y(\mathbf{x})/\lVert\mathbf{w}\rVert. (Slide del corso.)

L’ultima proprietà è quella cruciale: il valore di y(x)y(\mathbf{x}), riscalato per la norma dei pesi, misura quanto un punto è lontano dal confine di decisione, e il suo segno dice da che parte sta. In particolare, un punto è classificato correttamente se e solo se tny(xn)>0t_n \, y(\mathbf{x}_n) > 0: moltiplicare per il target trasforma la distanza con segno in una quantità positiva per i punti dal lato giusto, esattamente come farebbe un valore assoluto ma restando una funzione liscia dei parametri.

2.2 Il limite del perceptron#

Il perceptron, applicabile quando il problema è linearmente separabile, minimizza una perdita proporzionale all’entità degli errori sui soli punti misclassificati; quando trova una separazione perfetta la perdita è zero e l’algoritmo si ferma. Il difetto è che il perceptron non esprime alcuna preferenza tra le infinite separazioni perfette possibili: qualunque iperpiano che separa i dati azzera la perdita, e quale venga effettivamente trovato dipende solo dall’inizializzazione dei pesi e dall’ordine di presentazione dei campioni.

Tre separazioni perfette, non equivalenti. Tutti e tre gli iperpiani azzerano la perdita del perceptron, ma i primi due passano rasenti ad alcuni punti; il terzo, che scorre a distanza ragionevole da entrambe le classi, è intuitivamente il più robusto. (Slide del corso.)

Eppure le soluzioni non sono affatto equivalenti. Si immaginino tre iperpiani che separano tutti lo stesso dataset: due passano rasenti ad alcuni punti, il terzo scorre a distanza ragionevole da entrambe le classi. Intuitivamente il terzo è preferibile: un punto di test appena diverso dai punti di training (per rumore o per naturale variabilità) finirebbe facilmente dal lato sbagliato di un confine che passa a un soffio dai dati, mentre un confine “largo” tollera perturbazioni. La qualità di una separazione non è solo separare, è separare con riserva di sicurezza.

2.3 Il margine e il classificatore a massimo margine#

Margine

Dato un iperpiano separatore y(x)=wTϕ(x)+b=0y(\mathbf{x}) = \mathbf{w}^T\boldsymbol{\phi}(\mathbf{x}) + b = 0, il margine è la distanza tra l’iperpiano e il punto del dataset più vicino ad esso:

margine=minntn(wTϕ(xn)+b)w2\text{margine} = \min_n \frac{t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big)}{\lVert \mathbf{w} \rVert_2}

Il fattore tnt_n garantisce che la quantità sia una distanza positiva per punti correttamente classificati, sia sul lato positivo sia su quello negativo.

Il margine. La distanza m tra l’iperpiano separatore e il punto più vicino: il classificatore a massimo margine cerca l’iperpiano che la rende più grande possibile. (Slide del corso.)

Il classificatore a massimo margine cerca l’iperpiano che rende questa distanza la più grande possibile:

w,b=argmaxw,b{1w2minntn(wTϕ(xn)+b)}\mathbf{w}^*, b^* = \arg\max_{\mathbf{w}, b} \left\{ \frac{1}{\lVert \mathbf{w} \rVert_2} \min_n \, t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big) \right\}

Un’osservazione geometrica utile: nella soluzione ottima la distanza dal punto positivo più vicino e quella dal punto negativo più vicino devono essere uguali. Se fossero diverse, si potrebbe traslare l’iperpiano verso la classe più lontana guadagnando margine; quindi qualunque iperpiano con distanze diverse dai due lati non può essere ottimo.

In parole semplici: tra tutte le rette (o iperpiani) che separano i dati, la SVM sceglie quella che passa “più al centro” possibile del corridoio vuoto tra le due classi, alla stessa distanza dai punti più vicini di entrambe. È lo stesso criterio con cui si guida in una strettoia: al centro, il più lontano possibile da entrambi i muri.

Il problema così scritto, un massimo di un minimo con una frazione, è però molto scomodo da ottimizzare direttamente. Serve una riformulazione.

3. La formulazione primale#

3.1 L’iperpiano canonico#

L’iperpiano canonico. La normalizzazione fissa y = \pm 1 sui punti più vicini (cerchiati, l’insieme \mathcal{S}): il confine è la retta y = 0 e i due iperpiani di margine sono y = -1 e y = 1. (Slide del corso.)

La prima semplificazione nasce da un’osservazione: il problema, così com’è, è mal posto perché ha infinite soluzioni equivalenti. Se (w,b)(\mathbf{w}^*, b^*) definisce un certo iperpiano, allora (κw,κb)(\kappa \mathbf{w}^*, \kappa b^*) per qualunque costante κ>0\kappa > 0 definisce esattamente lo stesso iperpiano: l’equazione y(x)=0y(\mathbf{x}) = 0 non cambia moltiplicando tutto per una costante positiva, e nemmeno il margine cambia, perché il fattore κ\kappa compare sia al numeratore (dentro yy) sia al denominatore (dentro w2\lVert \mathbf{w} \rVert_2) e si semplifica. La scala di w\mathbf{w} e bb è quindi irrilevante per la geometria, ma lascia l’ottimizzazione con infinite soluzioni indistinguibili.

Per fissare la scala si sceglie, tra le infinite versioni equivalenti, quella detta iperpiano canonico: si impone che per il punto (o i punti) più vicini all’iperpiano valga

tn(wTϕ(xn)+b)=1t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big) = 1

cioè che la funzione yy valga esattamente +1+1 sui punti positivi a ridosso del margine e 1-1 su quelli negativi. Con questa normalizzazione:

In parole semplici: siccome moltiplicare pesi e bias per una costante non cambia la retta di separazione, si sfrutta questa libertà per fissare una convenzione comoda: sui punti più vicini la funzione deve valere esattamente ±1\pm 1. Da quel momento il margine si legge direttamente dalla norma dei pesi: pesi piccoli significano margine grande.

3.2 Il problema quadratico primale#

Con la normalizzazione canonica, massimizzare il margine 1/w21/\lVert \mathbf{w} \rVert_2 equivale a minimizzare w2\lVert \mathbf{w} \rVert_2, e per convenienza si minimizza la norma al quadrato (i problemi quadratici hanno ottimi algoritmi dedicati e derivate semplici). Il vincolo di canonicità, insieme al fatto che tutti i punti devono stare sul lato giusto e fuori dal margine, dà i vincoli del problema.

Problema primale della SVM a margine rigido

minw,b  12w22soggetto atn(wTϕ(xn)+b)1,n=1,,N\begin{aligned} &\min_{\mathbf{w}, b} \; \frac{1}{2} \lVert \mathbf{w} \rVert_2^2 \\ &\text{soggetto a} \quad t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big) \geq 1, \qquad n = 1, \dots, N \end{aligned}

Natura del problema: ottimizzazione quadratica (obiettivo quadratico convesso, vincoli lineari), quindi convessa: l’ottimo trovato è sempre globale.

Vincoli attivi: i vincoli valgono con uguaglianza (=1=1) esattamente per i punti sul margine, con disuguaglianza stretta (>1>1) per tutti gli altri.

Questa formulazione definisce completamente il problema, ma non è ancora la forma finale della SVM. Il motivo è lo stesso che ha motivato i kernel: ϕ(xn)\boldsymbol{\phi}(\mathbf{x}_n) può vivere in uno spazio a dimensionalità enorme o infinita, e non si vuole mai doverlo calcolare esplicitamente. Serve una riscrittura del problema in cui i vettori di feature compaiano solo attraverso prodotti scalari, sostituibili con kernel: è il passaggio al problema duale.

4. Dal primale al duale: moltiplicatori di Lagrange e KKT#

4.1 La lagrangiana#

Lo strumento standard per l’ottimizzazione vincolata sono i moltiplicatori di Lagrange (la trattazione completa, con tutti i casi, è nell’Appendice E del Bishop; qui servono il meccanismo e l’intuizione). Si introduce una nuova variabile αn0\alpha_n \geq 0 per ogni vincolo, si riscrive ciascun vincolo nella forma “0\geq 0”, cioè tn(wTϕ(xn)+b)10t_n(\mathbf{w}^T\boldsymbol{\phi}(\mathbf{x}_n) + b) - 1 \geq 0, e si costruisce la funzione lagrangiana sottraendo all’obiettivo i vincoli pesati dai moltiplicatori:

L(w,b,α)=12w22    n=1Nαn[tn(wTϕ(xn)+b)1],αn0\mathcal{L}(\mathbf{w}, b, \boldsymbol{\alpha}) = \frac{1}{2} \lVert \mathbf{w} \rVert_2^2 \; - \; \sum_{n=1}^{N} \alpha_n \Big[ t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big) - 1 \Big], \qquad \alpha_n \geq 0

La lagrangiana va minimizzata rispetto alle variabili originali w\mathbf{w} e bb e massimizzata rispetto ai moltiplicatori α\boldsymbol{\alpha}. L’intuizione del meccanismo: se un vincolo viene violato, il termine tra parentesi quadre diventa negativo; massimizzando su αn0\alpha_n \geq 0, il moltiplicatore corrispondente può crescere e far esplodere la penalità, quindi la soluzione ottima del gioco min-max non può contenere violazioni. I moltiplicatori agiscono da “prezzi” delle violazioni.

4.2 Le condizioni di stazionarietà#

Si annullano i gradienti della lagrangiana rispetto alle variabili primali:

Lw=0        w=n=1Nαntnϕ(xn)Lb=0        n=1Nαntn=0\frac{\partial \mathcal{L}}{\partial \mathbf{w}} = 0 \;\; \Rightarrow \;\; \mathbf{w} = \sum_{n=1}^{N} \alpha_n t_n \boldsymbol{\phi}(\mathbf{x}_n) \qquad\qquad \frac{\partial \mathcal{L}}{\partial b} = 0 \;\; \Rightarrow \;\; \sum_{n=1}^{N} \alpha_n t_n = 0

La prima equazione è un cambio di variabile fondamentale: il vettore dei pesi ottimo è una combinazione lineare dei vettori di feature dei campioni, con coefficienti αntn\alpha_n t_n. Questo permette di eliminare w\mathbf{w} dal problema, sostituendolo ovunque con questa espressione. La seconda equazione è un vincolo aggiuntivo che lega i moltiplicatori ai target e che entrerà nel problema duale.

4.3 Il problema duale#

Sostituendo w=nαntnϕ(xn)\mathbf{w} = \sum_n \alpha_n t_n \boldsymbol{\phi}(\mathbf{x}_n) nella lagrangiana e sfruttando nαntn=0\sum_n \alpha_n t_n = 0, le variabili w\mathbf{w} e bb scompaiono del tutto e resta un problema nella sola α\boldsymbol{\alpha}.

Il calcolo esplicito della sostituzione

I passaggi sono meccanici ma vale la pena vederli una volta, perché “derivare il duale dal primale” è una domanda d’esame ricorrente. Sostituendo l’espressione di w\mathbf{w}:

12w22=12(nαntnϕ(xn)) ⁣T ⁣(mαmtmϕ(xm))=12nmαnαmtntmk(xn,xm)\frac{1}{2}\lVert \mathbf{w} \rVert_2^2 = \frac{1}{2} \left( \sum_n \alpha_n t_n \boldsymbol{\phi}(\mathbf{x}_n) \right)^{\!T} \! \left( \sum_m \alpha_m t_m \boldsymbol{\phi}(\mathbf{x}_m) \right) = \frac{1}{2} \sum_{n}\sum_{m} \alpha_n \alpha_m t_n t_m \, k(\mathbf{x}_n, \mathbf{x}_m)

nαntnwTϕ(xn)=nmαnαmtntmk(xn,xm),bnαntn=0\sum_n \alpha_n t_n \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) = \sum_{n}\sum_{m} \alpha_n \alpha_m t_n t_m \, k(\mathbf{x}_n, \mathbf{x}_m), \qquad b \sum_n \alpha_n t_n = 0

La lagrangiana diventa quindi

L=12nmαnαmtntmk(xn,xm)nmαnαmtntmk(xn,xm)+nαn=nαn12nmαnαmtntmk(xn,xm)\mathcal{L} = \frac{1}{2}\sum_{n}\sum_{m} \alpha_n \alpha_m t_n t_m k(\mathbf{x}_n, \mathbf{x}_m) - \sum_{n}\sum_{m} \alpha_n \alpha_m t_n t_m k(\mathbf{x}_n, \mathbf{x}_m) + \sum_n \alpha_n = \sum_n \alpha_n - \frac{1}{2}\sum_{n}\sum_{m} \alpha_n \alpha_m t_n t_m k(\mathbf{x}_n, \mathbf{x}_m)

che è l’obiettivo duale da massimizzare.

Problema duale della SVM a margine rigido

maxα  L~(α)=n=1Nαn    12n=1Nm=1Nαnαmtntmk(xn,xm)soggetto aαn0    n,n=1Nαntn=0\begin{aligned} &\max_{\boldsymbol{\alpha}} \; \tilde{\mathcal{L}}(\boldsymbol{\alpha}) = \sum_{n=1}^{N} \alpha_n \; - \; \frac{1}{2} \sum_{n=1}^{N} \sum_{m=1}^{N} \alpha_n \alpha_m t_n t_m \, k(\mathbf{x}_n, \mathbf{x}_m) \\ &\text{soggetto a} \quad \alpha_n \geq 0 \;\; \forall n, \qquad \sum_{n=1}^{N} \alpha_n t_n = 0 \end{aligned}

Variabili: i soli moltiplicatori αn\alpha_n, uno per campione: la dimensione del problema dipende da NN, non dalla dimensionalità del feature space.

Kernel: k(xn,xm)=ϕ(xn)Tϕ(xm)k(\mathbf{x}_n, \mathbf{x}_m) = \boldsymbol{\phi}(\mathbf{x}_n)^T \boldsymbol{\phi}(\mathbf{x}_m): i vettori di feature compaiono solo attraverso prodotti scalari.

Il punto qualificante è l’ultima riga: nell’obiettivo duale i vettori di feature sopravvivono solo dentro prodotti scalari, che si possono valutare con la funzione kernel senza mai costruire le feature. Per risolvere l’ottimizzazione basta conoscere il kernel: esattamente l’obiettivo dichiarato all’inizio. In più, il numero di variabili è NN invece della dimensionalità del feature space (che nel primale determina la taglia di w\mathbf{w} e può essere infinita).

In parole semplici: il passaggio al duale è un cambio di prospettiva: invece di cercare direttamente i pesi dell’iperpiano, si cerca “quanto conta” ciascun punto del dataset (il suo αn\alpha_n). I pesi si ricostruiscono poi come combinazione dei punti pesati per la loro importanza. Il guadagno è che in questa forma servono solo le similarità tra coppie di punti, cioè i kernel, mai le coordinate nel feature space.

4.4 Le condizioni KKT#

Per problemi convessi con vincoli di disuguaglianza, la soluzione ottima è caratterizzata dalle condizioni di Karush-Kuhn-Tucker (KKT).

Condizioni KKT per la SVM

All’ottimo, per ogni n=1,,Nn = 1, \dots, N valgono simultaneamente:

αn0,tny(xn)10,αn(tny(xn)1)=0\alpha_n \geq 0, \qquad t_n \, y(\mathbf{x}_n) - 1 \geq 0, \qquad \alpha_n \big( t_n \, y(\mathbf{x}_n) - 1 \big) = 0

Prima condizione: ammissibilità duale (i moltiplicatori sono non negativi).

Seconda condizione: ammissibilità primale (tutti i vincoli sono rispettati).

Terza condizione (complementarietà): per ogni punto, almeno uno tra αn\alpha_n e lo scarto del vincolo è zero: o il moltiplicatore è nullo, o il punto è esattamente sul margine.

La condizione di complementarietà è quella da cui discende tutta la struttura della soluzione, come si vede nella prossima sezione.

5. I support vector e la soluzione#

5.1 Sparsità: perché quasi tutti i moltiplicatori si annullano#

Risolto il duale, la funzione discriminante si ottiene sostituendo w=nαntnϕ(xn)\mathbf{w} = \sum_n \alpha_n t_n \boldsymbol{\phi}(\mathbf{x}_n) in y(x)y(\mathbf{x}):

y(x)=n=1Nαntnk(x,xn)+by(\mathbf{x}) = \sum_{n=1}^{N} \alpha_n t_n \, k(\mathbf{x}, \mathbf{x}_n) + b

A prima vista sembra la solita soluzione kernel non sparsa: una somma su tutti gli NN campioni. La sparsità arriva dalle condizioni KKT. Per la condizione di complementarietà, per ogni punto vale αn(tny(xn)1)=0\alpha_n \big( t_n y(\mathbf{x}_n) - 1 \big) = 0; quindi:

Support vector

I support vector sono i campioni con moltiplicatore αn>0\alpha_n > 0; nel caso a margine rigido sono esattamente i punti che giacciono sul margine, cioè che soddisfano tny(xn)=1t_n \, y(\mathbf{x}_n) = 1. L’insieme dei loro indici si denota S\mathcal{S}.

La somma nella funzione discriminante si riduce quindi ai soli support vector:

y(x)=nSαntnk(x,xn)+by(\mathbf{x}) = \sum_{n \in \mathcal{S}} \alpha_n t_n \, k(\mathbf{x}, \mathbf{x}_n) + b

In un problema reale con migliaia di punti, i support vector possono essere una manciata: tutti i punti “interni” alle rispettive classi, lontani dal confine, hanno αn=0\alpha_n = 0 e si possono letteralmente buttare via dopo l’addestramento senza cambiare nulla. Per classificare un punto nuovo bastano i kernel tra quel punto e i pochi support vector.

In parole semplici: la posizione dell’iperpiano ottimo dipende solo dai punti che gli stanno addosso, quelli sul margine: sono loro che lo “sostengono”, come i pali sostengono una tenda. Spostare o eliminare un punto lontano dal confine non cambia niente; per questo, dopo l’addestramento, si conservano solo i support vector e la predizione diventa velocissima.

5.2 Il calcolo del bias#

Il duale determina gli αn\alpha_n ma non direttamente bb, che è sparito annullando il gradiente. Lo si recupera dalla proprietà canonica: ogni support vector soddisfa tny(xn)=1t_n \, y(\mathbf{x}_n) = 1, cioè

tn(mSαmtmk(xn,xm)+b)=1t_n \left( \sum_{m \in \mathcal{S}} \alpha_m t_m \, k(\mathbf{x}_n, \mathbf{x}_m) + b \right) = 1

In linea di principio basta risolvere questa equazione per bb usando un solo support vector qualsiasi. In pratica, per una soluzione numericamente più stabile, la si risolve per tutti i support vector e si media il risultato (moltiplicando per tnt_n e usando tn2=1t_n^2 = 1):

b=1SnS(tnmSαmtmk(xn,xm))b = \frac{1}{|\mathcal{S}|} \sum_{n \in \mathcal{S}} \left( t_n - \sum_{m \in \mathcal{S}} \alpha_m t_m \, k(\mathbf{x}_n, \mathbf{x}_m) \right)

In parole semplici: ogni support vector “sa” dove deve stare il margine, quindi ognuno fornisce una stima di bb; per non fidarsi di un punto solo, si chiede a tutti e si fa la media.

5.3 Che cosa serve davvero a runtime#

Vale la pena distinguere le due fasi. In addestramento serve l’intera matrice di Gram: il kernel tra ogni coppia di punti del training set, perché l’obiettivo duale li coinvolge tutti. In inferenza, invece, tutta l’informazione necessaria è già condensata negli αn\alpha_n dei support vector e in bb: per classificare un punto nuovo si calcolano solo i kernel tra il punto nuovo e i support vector (questi non si possono precalcolare, perché dipendono dal punto da classificare, ma sono pochi).

5.4 Un bound sull’errore leave-one-out#

La sparsità ha anche una conseguenza teorica elegante. Si consideri la procedura di leave-one-out: si toglie un punto, si riaddestra, si verifica se il punto tolto viene classificato correttamente. Se il punto tolto non è un support vector, la soluzione riaddestrata è identica a quella originale (il punto non contribuiva), e siccome quel punto era correttamente classificato e fuori dal margine, resta correttamente classificato: non può generare errore. Gli unici punti che possono produrre un errore leave-one-out sono quindi i support vector, da cui il bound

LLOOSNL_{LOO} \leq \frac{|\mathcal{S}|}{N}

cioè l’errore leave-one-out è limitato dalla frazione di support vector. Poche decine di support vector su migliaia di punti sono quindi anche un indizio di buona generalizzazione, non solo un vantaggio computazionale.

In parole semplici: se togliendo un punto la soluzione non cambia, quel punto non può essere sbagliato nel test leave-one-out. Solo i support vector possono “far danni”, quindi meno support vector ci sono, migliore è la stima dell’errore di generalizzazione.

6. SVM con kernel: confini non lineari#

Tutto il macchinario descritto vive nel feature space: lì l’iperpiano è lineare e il margine è una striscia diritta. Ma poiché sia l’addestramento (duale) sia la predizione (funzione discriminante) usano solo la funzione kernel, si può scegliere qualunque kernel valido, per esempio quello gaussiano, e ottenere confini di decisione arbitrariamente non lineari nello spazio originale: la retta nel feature space, riportata indietro, può diventare una curva qualsiasi, anche chiusa, che racchiude isole di una classe dentro l’altra. Anche le linee di margine, diritte nel feature space, appaiono come curve che affiancano il confine.

SVM con kernel gaussiano. Il confine di decisione (linea spessa) è fortemente non lineare nello spazio originale; le linee sottili sono le curve di margine e i punti cerchiati in verde sono i support vector, gli unici che determinano la soluzione. (Slide del corso.)

L’immagine da tenere a mente per un problema 2D con kernel gaussiano: un confine curvo e sinuoso tra le due classi, due curve di margine ai suoi lati, e una manciata di punti cerchiati (i support vector) appoggiati sulle curve di margine (e, nella variante soft margin della prossima sezione, anche sparsi nella zona di violazione). Tutti gli altri punti, per quanto numerosi, sono irrilevanti per la soluzione.

In parole semplici: la SVM disegna sempre una linea dritta, ma in uno spazio trasformato che non vediamo. Con il kernel giusto quella linea dritta, vista nel nostro spazio, può essere una curva complicata quanto serve. La combinazione “massimo margine + kernel + sparsità” è quello che ha reso le SVM per anni lo stato dell’arte della classificazione.

7. Soft margin: quando i dati non sono separabili#

7.1 Perché il margine rigido non basta#

Tutta la costruzione precedente assume che i dati siano linearmente separabili nel feature space. Con kernel abbastanza ricchi (per esempio il kernel gaussiano, che corrisponde a un feature space a dimensionalità infinita) uno spazio in cui i dati sono separabili si trova quasi sempre. Il problema è un altro: se il dataset contiene punti rumorosi o outlier, imporre la separazione perfetta costringe il modello a contorcersi per accontentare ogni singolo punto, producendo confini di decisione complessi e irregolari che inseguono il rumore. È l’overfitting nella sua versione SVM: i vincoli rigidi non lasciano al modello la libertà di sacrificare un punto anomalo in cambio di un confine più semplice.

7.2 Le variabili di slack e il primale soft margin#

Idea chiave: trasformare i vincoli rigidi in vincoli morbidi introducendo, per ogni punto, una variabile di slack ξn0\xi_n \geq 0 che misura di quanto quel punto viola il proprio margine; le violazioni sono ammesse ma pagate nell’obiettivo, con un prezzo unitario CC scelto dal progettista.

Problema primale della SVM soft margin

minw,b,ξ  12w22+Cn=1Nξnsoggetto atn(wTϕ(xn)+b)1ξn,ξn0,n=1,,N\begin{aligned} &\min_{\mathbf{w}, b, \boldsymbol{\xi}} \; \frac{1}{2} \lVert \mathbf{w} \rVert_2^2 + C \sum_{n=1}^{N} \xi_n \\ &\text{soggetto a} \quad t_n \big( \mathbf{w}^T \boldsymbol{\phi}(\mathbf{x}_n) + b \big) \geq 1 - \xi_n, \qquad \xi_n \geq 0, \qquad n = 1, \dots, N \end{aligned}

Variabili di slack ξn\xi_n: misurano la violazione del margine da parte del punto nn-esimo.

Parametro C>0C > 0: peso delle violazioni nell’obiettivo; regola il compromesso tra ampiezza del margine e numero/entità degli errori.

Il valore della slack ha una lettura geometrica diretta:

Le variabili di slack. I punti con \xi = 0 rispettano il margine; un punto con \xi < 1 è dentro il margine ma ancora dal lato giusto; un punto con \xi > 1 ha superato il confine ed è misclassificato. I punti cerchiati sono i support vector del caso soft. (Slide del corso.)

Senza il termine CnξnC \sum_n \xi_n nell’obiettivo, il modello potrebbe violare i vincoli a piacere azzerando di fatto il problema; il termine di penalità dice “puoi sbagliare, ma ogni violazione costa”.

In parole semplici: la versione soft della SVM smette di pretendere la perfezione. Ogni punto scomodo può entrare nel margine o addirittura finire dal lato sbagliato, pagando una multa proporzionale allo sconfinamento. Il modello sceglie l’equilibrio più economico tra un margine largo e il totale delle multe.

7.3 Il ruolo di C e il compromesso bias-varianza#

Il parametro CC è l’analogo SVM del coefficiente di regolarizzazione, ma con verso opposto rispetto al λ\lambda della ridge regression:

C grande: nessuna violazione ammessail confine insegue l'outlier, margine strettoC piccolo: violazioni economichemargine largo, l'outlier paga una slack ξξ > 1

Mentre nella ridge λ\lambda grande significa più regolarizzazione, qui è CC piccolo a regolarizzare di più: informalmente CC si comporta come 1/λ1/\lambda. Come ogni iperparametro, CC va scelto con una procedura di tuning (per esempio validazione incrociata): non esiste un valore giusto a priori.

In parole semplici: CC è la severità del giudice sulle multe per sconfinamento. Giudice severissimo (CC grande): il modello non tollera errori e si contorce per accontentare ogni punto, rischiando l’overfitting. Giudice tollerante (CC piccolo): il modello traccia un confine semplice e liscio, accettando qualche sbaglio. Attenzione all’esame: funziona al contrario del λ\lambda della regolarizzazione.

7.4 Il duale soft margin: vincoli a scatola#

La derivazione del duale ricalca quella del margine rigido, con un moltiplicatore in più per i vincoli ξn0\xi_n \geq 0. La lagrangiana è

L(w,b,ξ,α,μ)=12w22+Cn=1Nξnn=1Nαn[tny(xn)1+ξn]n=1Nμnξn\mathcal{L}(\mathbf{w}, b, \boldsymbol{\xi}, \boldsymbol{\alpha}, \boldsymbol{\mu}) = \frac{1}{2}\lVert \mathbf{w} \rVert_2^2 + C \sum_{n=1}^{N} \xi_n - \sum_{n=1}^{N} \alpha_n \Big[ t_n y(\mathbf{x}_n) - 1 + \xi_n \Big] - \sum_{n=1}^{N} \mu_n \xi_n

con αn0\alpha_n \geq 0 e μn0\mu_n \geq 0. Le condizioni di stazionarietà rispetto a w\mathbf{w} e bb sono identiche a prima (w=nαntnϕ(xn)\mathbf{w} = \sum_n \alpha_n t_n \boldsymbol{\phi}(\mathbf{x}_n) e nαntn=0\sum_n \alpha_n t_n = 0); la novità è la derivata rispetto alle slack:

Lξn=Cαnμn=0        αn=CμnC\frac{\partial \mathcal{L}}{\partial \xi_n} = C - \alpha_n - \mu_n = 0 \;\; \Rightarrow \;\; \alpha_n = C - \mu_n \leq C

Poiché μn0\mu_n \geq 0, ogni moltiplicatore risulta limitato superiormente da CC. Sostituendo tutto nella lagrangiana, le slack e i μn\mu_n scompaiono e l’obiettivo duale risulta identico a quello del margine rigido; cambia solo l’insieme ammissibile.

Problema duale della SVM soft margin

maxα  n=1Nαn12n=1Nm=1Nαnαmtntmk(xn,xm)soggetto a0αnC    n,n=1Nαntn=0\begin{aligned} &\max_{\boldsymbol{\alpha}} \; \sum_{n=1}^{N} \alpha_n - \frac{1}{2} \sum_{n=1}^{N} \sum_{m=1}^{N} \alpha_n \alpha_m t_n t_m \, k(\mathbf{x}_n, \mathbf{x}_m) \\ &\text{soggetto a} \quad 0 \leq \alpha_n \leq C \;\; \forall n, \qquad \sum_{n=1}^{N} \alpha_n t_n = 0 \end{aligned}

I vincoli 0αnC0 \leq \alpha_n \leq C si chiamano box constraints: ogni variabile è confinata in una scatola con bordo inferiore e superiore.

Il valore di αn\alpha_n ora classifica i punti in tre categorie, informazione richiesta spesso all’esame:

Il cap a CC ha anche una lettura da regolarizzazione: limita il contributo massimo che un singolo campione può dare alla soluzione. Con CC piccolo nessun punto, per quanto anomalo, può tirare il confine verso di sé oltre una certa forza.

In parole semplici: nel soft margin ogni punto ha un’influenza compresa tra 0 e CC. Influenza zero: punto tranquillo lontano dal confine. Influenza intermedia: punto appoggiato esattamente sul margine. Influenza satura a CC: punto problematico che sconfina o è proprio dal lato sbagliato; il tetto CC gli impedisce comunque di dominare la soluzione.

7.5 La ν-SVM#

Un difetto pratico di CC è che il suo valore numerico non ha alcuna interpretazione: non si sa a priori come C=10C = 10 o C=0.1C = 0.1 si tradurranno in comportamento del modello. Esiste una formulazione alternativa, la ν\nu-SVM, che sostituisce CC con un parametro ν(0,1)\nu \in (0, 1) dal significato trasparente:

frazione di margin errors    ν    frazione di support vector\text{frazione di margin errors} \; \leq \; \nu \; \leq \; \text{frazione di support vector}

cioè ν\nu è contemporaneamente un limite superiore alla frazione di punti che violano il margine e un limite inferiore alla frazione di support vector. Per esempio ν=0.1\nu = 0.1 garantisce che al più il 10% dei campioni violi il margine, e che i support vector siano almeno il 10% dei campioni. L’introduzione del soft margin, in generale, rende la funzione più liscia ma tende ad aumentare il numero di support vector, perché ai punti sul margine si aggiungono tutti quelli che lo violano.

Una \nu-SVM con kernel gaussiano su dati fortemente sovrapposti. Il confine (linea nera) è liscio nonostante il rumore; i punti cerchiati in verde sono i support vector, numerosi perché comprendono anche tutti i punti che violano il margine. (Slide del corso.)

8. Addestrare una SVM in pratica#

8.1 Il costo del problema quadratico#

In linea di principio addestrare una SVM significa solo risolvere il problema duale per trovare gli αn\alpha_n, e poi calcolare bb. In pratica il problema quadratico (QP) ha costo dell’ordine di O(N3)O(N^3) nel numero di campioni: con training set grandi l’addestramento diretto è molto costoso. L’inferenza invece è economica, perché usa solo i support vector. Sono state sviluppate tecniche per accelerare l’addestramento, tutte basate sulla stessa strategia: risolvere iterativamente sottoproblemi piccoli invece del problema completo. Esistono anche varianti per l’apprendimento online, quando i dati non sono tutti disponibili all’inizio ma arrivano nel tempo (metodi basati su chunking e metodi incrementali).

8.2 Chunking#

Si costruisce un working set, inizialmente un sottocampione casuale del dataset, e si risolve il problema quadratico solo su di esso, ottenendo dei support vector provvisori. Si applica poi il modello all’intero dataset e si individua il worst set: i punti su cui il modello commette gli errori più gravi. Il nuovo working set è l’unione dei support vector correnti e del worst set, e si itera. La logica: i punti interessanti sono quelli già identificati come support vector più quelli su cui il modello fatica. Il metodo converge alla soluzione ottima, ma ha un difetto: la dimensione del working set non è limitata e può crescere fino a diventare paragonabile al dataset intero, vanificando il vantaggio.

datasetworking setSV correnti + worst setQP sul working setrisolve il duale ristrettoSVM provvisoria + SVworst setgli errori più gravi sul datasetsottocampione inizialetrainingapplica la SVM a tutto il datasetnuova iterazione

8.3 Metodo di Osuna#

Stessa idea del chunking, ma con working set a dimensione fissa: a ogni iterazione si sostituisce un numero fisso di elementi del working set con altrettanti campioni misclassificati del dataset. La dimensione costante (per esempio il 10% del dataset) garantisce, grazie alla complessità cubica, un guadagno computazionale di ordini di grandezza su ogni sottoproblema. Converge all’ottimo, ma come il chunking richiede molte iterazioni.

8.4 Sequential Minimal Optimization (SMO)#

È l’approccio con le fondamenta teoriche più solide e il più usato in pratica. L’osservazione chiave: se si ottimizza il duale rispetto a due soli moltiplicatori alla volta, tenendo fissi gli altri, il sottoproblema ha soluzione analitica, senza bisogno di alcun solutore numerico (due variabili sono il minimo indispensabile, perché il vincolo nαntn=0\sum_n \alpha_n t_n = 0 impedisce di muoverne una sola). SMO itera quindi su coppie di punti, aggiornando ogni volta i loro α\alpha in forma chiusa: servono moltissime iterazioni, ma ognuna è praticamente istantanea. Il criterio di arresto tipico è la stabilità della soluzione: ci si ferma quando gli aggiornamenti tra iterazioni successive scendono sotto una soglia.

In parole semplici: invece di risolvere un gigantesco problema di ottimizzazione tutto insieme, SMO lo sbriciola nel più piccolo pezzo possibile, due punti alla volta, per il quale la soluzione si scrive con carta e penna. Tanti micro-passi velocissimi al posto di un macro-passo proibitivo.

9. SVM multi-classe#

La definizione della SVM è intrinsecamente binaria: il margine è la distanza tra due classi. Estendere la formulazione stessa a più classi si è rivelato difficile (molti tentativi, pochi successi), quindi in pratica si decompone il problema multi-classe in più problemi binari, con le strategie generali già viste per i classificatori binari.

One-against-all. Il problema a 3 classi è decomposto in 3 problemi binari, ciascuno “una classe contro tutte le altre” e addestrato sull’intero dataset. (Slide del corso.)
1 vs 31 vs 22 vs 3classe 1classe 2classe 3non 3non 1non 2non 2

In sintesi: one-against-one è il più accurato, DAGSVM ne è un’approssimazione più veloce in test, one-against-all è il più economico in memoria.

10. SVM per regressione (cenni)#

L’idea del margine si può trasportare in regressione rovesciandola. Invece di una zona vuota da massimizzare tra due classi, si definisce un tubo di tolleranza di ampiezza ϵ\epsilon attorno alla funzione di regressione: gli errori dei punti che cadono dentro il tubo non vengono penalizzati affatto, mentre si penalizzano solo gli scostamenti oltre ϵ\epsilon. Rispetto alla regressione classica, che penalizza ogni scostamento per quanto piccolo, si ottiene un metodo più robusto e di nuovo sparso: i support vector sono i punti sul bordo o fuori dal tubo, e solo loro determinano la soluzione. Con i kernel, il tubo può seguire funzioni non lineari arbitrarie. Il corso si limita a questa intuizione, senza sviluppare la formulazione completa.

Il tubo di tolleranza nello spazio originale. La funzione di regressione (linea continua) è affiancata da un tubo di ampiezza \epsilon: gli errori dentro il tubo non costano nulla, i punti sul bordo o fuori (cerchiati) sono i support vector. (Slide del corso.)
Lo stesso tubo nel feature space. Con il kernel giusto la funzione non lineare diventa una retta e il tubo una striscia diritta: è la stessa geometria del margine di classificazione, rovesciata. (Slide del corso.)

11. SVM, perceptron e logistic regression a confronto#

Le tre tecniche condividono lo stesso spazio delle ipotesi per la decisione: una funzione lineare (eventualmente in un feature space) di cui si guarda il segno. Ciò che le distingue è come scelgono w\mathbf{w} e bb dato il dataset:

Aspetto Perceptron Logistic regression SVM
Criterio di scelta azzerare gli errori sui punti misclassificati massima verosimiglianza sulle probabilità massimo margine
Soluzione trovata una qualunque separazione valida; dipende da inizializzazione e ordine dei dati unica, ma influenzata da tutti i punti del dataset unica, determinata dai soli support vector
Dati non separabili l’algoritmo non converge gestiti naturalmente gestiti con il soft margin
Output probabilistico no no (solo classe e margine)
Sparsità no no
Uso dei kernel possibile ma senza sparsità possibile ma senza sparsità naturale ed efficiente

Il confronto chiarisce il posizionamento delle SVM: rispetto al perceptron aggiungono un criterio di preferenza (il margine) che rende la soluzione unica, riproducibile e più robusta; rispetto alla logistic regression rinunciano all’output probabilistico in cambio di sparsità e di un’integrazione naturale con i kernel.

In parole semplici: perceptron, logistic regression e SVM disegnano tutte una linea di separazione; il perceptron ne trova una qualsiasi, la logistic regression quella più plausibile in senso probabilistico ascoltando tutti i punti, la SVM quella più prudente ascoltando solo i punti di frontiera.

12. Procedura d’esame ed esercizi svolti#

Gli esercizi numerici sulle SVM sono tra i più frequenti in assoluto negli esami del corso. Le due tipologie ricorrenti: analizzare una SVM lineare di cui sono dati w\mathbf{w} e bb (support vector, margine, classificazione, effetto di nuovi punti) e ricavare da un piccolo dataset 2D la SVM a massimo margine (support vector, w\mathbf{w}, bb, margine). Conviene padroneggiare le formule operative e le procedure meccaniche prima di affrontare gli svolgimenti.

12.1 La cassetta degli attrezzi#

Per una SVM lineare y(x)=wTx+by(\mathbf{x}) = \mathbf{w}^T\mathbf{x} + b addestrata (in forma canonica):

  1. Confine di decisione: wTx+b=0\mathbf{w}^T\mathbf{x} + b = 0.
  2. Iperpiani di margine: wTx+b=+1\mathbf{w}^T\mathbf{x} + b = +1 (lato positivo) e wTx+b=1\mathbf{w}^T\mathbf{x} + b = -1 (lato negativo).
  3. Margine: 1w2\dfrac{1}{\lVert \mathbf{w} \rVert_2}; ampiezza totale del corridoio: 2w2\dfrac{2}{\lVert \mathbf{w} \rVert_2}.
  4. Classificazione di un punto: segno di y(x)y(\mathbf{x}).
  5. Test di support vector: si calcola tny(xn)t_n \, y(\mathbf{x}_n). Se vale esattamente 11: punto sul margine, support vector. Se vale meno di 11 (incluso negativo): punto dentro il margine o misclassificato, support vector nel caso soft margin. Se vale più di 11: punto fuori dal margine, non è un support vector.
  6. Vincoli sugli α\alpha: w=nαntnxn\mathbf{w} = \sum_n \alpha_n t_n \mathbf{x}_n, nαntn=0\sum_n \alpha_n t_n = 0 (la somma degli α\alpha dei positivi uguaglia quella dei negativi), αn=0\alpha_n = 0 per ogni non support vector.
  7. Aggiunta di un punto nuovo: se misclassificato dalla SVM corrente, bisogna sempre riaddestrare; se correttamente classificato e strettamente fuori dal margine (ty(x)>1t \, y(\mathbf{x}) > 1), la soluzione non cambia e non serve riaddestrare; se correttamente classificato ma sul margine o dentro il margine (ty(x)1t \, y(\mathbf{x}) \leq 1), in generale serve riaddestrare perché la soluzione a massimo margine può cambiare (con l’eccezione del punto che cade esattamente sul margine, che può lasciare la soluzione invariata).
  8. Rimozione di un punto: se non è un support vector la soluzione resta identica; se è un support vector la soluzione in generale cambia, e il margine può solo aumentare o restare uguale (si è tolto un vincolo, quindi la regione ammissibile si allarga).
  9. Numero minimo di support vector: almeno due, almeno uno per classe: su entrambi gli iperpiani di margine deve appoggiarsi almeno un punto, altrimenti si potrebbe allargare il margine.

12.2 Esercizio 1 (da esame): analisi di una SVM lineare data#

Traccia. Si consideri un classificatore SVM lineare definito dai parametri w=(2,1)T\mathbf{w} = (2, 1)^T e b=1b = 1. Rispondere motivando adeguatamente:

  1. il punto x(1)=(2,4)T\mathbf{x}^{(1)} = (-2, 4)^T è un support vector?
  2. Fornire un esempio di punto che giace sul confine di decisione.
  3. Come viene classificato il punto x(2)=(3,1)T\mathbf{x}^{(2)} = (3, -1)^T?
  4. Si raccoglie un nuovo campione x(3)=(1,2)T\mathbf{x}^{(3)} = (-1, 2)^T di cui si sa che appartiene alla classe negativa. È necessario riaddestrare la SVM?

Svolgimento.

Punto 1. Un punto è un support vector se giace sul margine (o, nel caso soft margin, dentro il margine). Il test è calcolare y(x(1))y(\mathbf{x}^{(1)}):

y(x(1))=wTx(1)+b=2(2)+14+1=4+4+1=1y(\mathbf{x}^{(1)}) = \mathbf{w}^T\mathbf{x}^{(1)} + b = 2 \cdot (-2) + 1 \cdot 4 + 1 = -4 + 4 + 1 = 1

Il valore è esattamente +1+1: il punto giace sull’iperpiano di margine del lato positivo. Sì, è un support vector, e in particolare sta esattamente sul margine (la risposta completa specifica entrambe le cose).

Punto 2. Il confine di decisione è l’insieme dei punti che soddisfano

2x1+x2+1=02 x_1 + x_2 + 1 = 0

Basta esibirne uno: scegliendo x1=0x_1 = 0 si ottiene x2=1x_2 = -1, quindi il punto (0,1)T(0, -1)^T giace sul confine di decisione. (Qualunque altra soluzione dell’equazione è ugualmente valida.)

Punto 3. Si calcola il valore della funzione discriminante e se ne guarda il segno:

y(x(2))=23+1(1)+1=61+1=6>0y(\mathbf{x}^{(2)}) = 2 \cdot 3 + 1 \cdot (-1) + 1 = 6 - 1 + 1 = 6 > 0

Il segno è positivo, quindi il punto è classificato nella classe positiva. Si può aggiungere che 6>16 > 1: il punto è ben oltre il margine, la classificazione è molto confidente.

Punto 4. Si calcola y(x(3))y(\mathbf{x}^{(3)}) e si confronta con l’etichetta nota t(3)=1t^{(3)} = -1:

y(x(3))=2(1)+12+1=2+2+1=1>0y(\mathbf{x}^{(3)}) = 2 \cdot (-1) + 1 \cdot 2 + 1 = -2 + 2 + 1 = 1 > 0

La SVM classifica il punto come positivo, ma la sua classe vera è negativa: il punto è misclassificato, quindi è necessario riaddestrare: la soluzione corrente viola la separazione e il nuovo problema di ottimizzazione produrrà in generale un confine diverso. Vale la pena riportare lo schema decisionale completo, spesso richiesto nella motivazione:

12.3 Procedura meccanica: trovare la SVM da un dataset 2D#

Data una manciata di punti etichettati nel piano, la procedura per trovare la SVM a massimo margine a mano è la seguente.

  1. Disegnare i punti (o ragionare sulle coordinate) e individuare la zona di confine tra le classi: i candidati support vector sono i punti di ciascuna classe più vicini all’altra classe.
  2. Sfruttare le simmetrie: se il dataset è simmetrico rispetto a un asse, il confine ottimo rispetta la simmetria (per esempio è verticale o orizzontale) e la forma di w\mathbf{w} si semplifica.
  3. Caso a due support vector (uno per classe): il confine è l’asse del segmento che li congiunge (perpendicolare al segmento, passante per il punto medio) e il margine è metà della loro distanza. Questo dà anche un limite superiore generale: il margine non può mai superare metà della distanza minima tra punti di classi opposte.
  4. Impostare i vincoli canonici sui support vector ipotizzati: tn(wTxn+b)=1t_n(\mathbf{w}^T\mathbf{x}_n + b) = 1 per ogni candidato, ed eventualmente la forma di w\mathbf{w} suggerita dalla simmetria. Risolvere il sistema lineare per w\mathbf{w} e bb.
  5. Verificare tutti gli altri punti: ogni punto non support vector deve soddisfare tn(wTxn+b)1t_n(\mathbf{w}^T\mathbf{x}_n + b) \geq 1. Se un punto viola il vincolo, l’ipotesi sui support vector era sbagliata: quel punto va incluso tra i support vector e si ripete il calcolo. Questa verifica è il passaggio che gli studenti dimenticano più spesso, ed è quella che certifica la soluzione.
  6. Calcolare il margine: 1/w21/\lVert \mathbf{w} \rVert_2.
  7. Se richiesti i moltiplicatori: risolvere w=nSαntnxn\mathbf{w} = \sum_{n \in \mathcal{S}} \alpha_n t_n \mathbf{x}_n insieme a nSαntn=0\sum_{n \in \mathcal{S}} \alpha_n t_n = 0, con αn=0\alpha_n = 0 fuori da S\mathcal{S}, e controllare che tutti gli αn\alpha_n risultino positivi (un α\alpha negativo segnala un’ipotesi sbagliata sui support vector).

12.4 Esercizio 2: support vector, pesi e margine da un dataset#

Traccia. È dato il dataset bidimensionale:

nn x1x_1 x2x_2 tt
1 3 1 +1+1
2 3 1-1 +1+1
3 6 1 +1+1
4 6 1-1 +1+1
5 1 0 1-1
6 0 1 1-1
7 0 1-1 1-1
8 1-1 0 1-1

Addestrando una SVM lineare hard margin: individuare i support vector, calcolare w\mathbf{w}, bb, il margine e i moltiplicatori αn\alpha_n.

Svolgimento.

Passo 1: geometria e candidati. I punti positivi occupano la regione con x13x_1 \geq 3, i negativi la regione con x11x_1 \leq 1. Il dataset è simmetrico rispetto all’asse x2=0x_2 = 0 (a ogni punto con x2=1x_2 = 1 corrisponde il gemello con x2=1x_2 = -1), quindi il confine ottimo è una retta verticale: w=(w1,0)T\mathbf{w} = (w_1, 0)^T. I punti positivi più vicini alla zona di confine sono x1=(3,1)\mathbf{x}_1 = (3, 1) e x2=(3,1)\mathbf{x}_2 = (3, -1); il negativo più vicino è x5=(1,0)\mathbf{x}_5 = (1, 0). Candidati support vector: S={1,2,5}\mathcal{S} = \{1, 2, 5\}.

Passo 2: vincoli canonici. Con w=(w1,0)T\mathbf{w} = (w_1, 0)^T:

Sottraendo la seconda equazione dalla prima: 2w1=22 w_1 = 2, quindi

w1=1,b=2,w=(1,0)Tw_1 = 1, \qquad b = -2, \qquad \mathbf{w} = (1, 0)^T

Il confine di decisione è x12=0x_1 - 2 = 0, cioè la retta verticale x1=2x_1 = 2; gli iperpiani di margine sono x1=3x_1 = 3 e x1=1x_1 = 1.

x1x2x1 = 2x1 = 1x1 = 3margine = 1classe +1classe −1

Passo 3: verifica degli altri punti. Si controlla tn(wTxn+b)1t_n(\mathbf{w}^T\mathbf{x}_n + b) \geq 1 per i punti fuori da S\mathcal{S}:

Tutti i vincoli sono soddisfatti: la soluzione è certificata e i support vector sono esattamente x1\mathbf{x}_1, x2\mathbf{x}_2, x5\mathbf{x}_5.

Passo 4: margine.

margine=1w2=112+02=1\text{margine} = \frac{1}{\lVert \mathbf{w} \rVert_2} = \frac{1}{\sqrt{1^2 + 0^2}} = 1

coerente con la geometria: il confine x1=2x_1 = 2 dista esattamente 1 sia da x1=3x_1 = 3 sia da x1=1x_1 = 1. L’ampiezza totale del corridoio è 2/w2=22/\lVert \mathbf{w} \rVert_2 = 2.

Passo 5: moltiplicatori. Si impone w=nSαntnxn\mathbf{w} = \sum_{n \in \mathcal{S}} \alpha_n t_n \mathbf{x}_n e nSαntn=0\sum_{n \in \mathcal{S}} \alpha_n t_n = 0:

α1(31)+α2(31)α5(10)=(10),α1+α2α5=0\alpha_1 \begin{pmatrix} 3 \\ 1 \end{pmatrix} + \alpha_2 \begin{pmatrix} 3 \\ -1 \end{pmatrix} - \alpha_5 \begin{pmatrix} 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \qquad \alpha_1 + \alpha_2 - \alpha_5 = 0

Dalla seconda componente della prima equazione: α1α2=0\alpha_1 - \alpha_2 = 0, quindi α1=α2\alpha_1 = \alpha_2. Dal vincolo di somma: α5=α1+α2=2α1\alpha_5 = \alpha_1 + \alpha_2 = 2\alpha_1. Sostituendo nella prima componente: 3α1+3α2α5=6α12α1=4α1=13\alpha_1 + 3\alpha_2 - \alpha_5 = 6\alpha_1 - 2\alpha_1 = 4\alpha_1 = 1, da cui

α1=α2=14,α5=12,α3=α4=α6=α7=α8=0\alpha_1 = \alpha_2 = \frac{1}{4}, \qquad \alpha_5 = \frac{1}{2}, \qquad \alpha_3 = \alpha_4 = \alpha_6 = \alpha_7 = \alpha_8 = 0

Tutti gli α\alpha dei support vector sono positivi: l’ipotesi era corretta. Verifica incrociata di bb con la formula della media sui support vector (kernel lineare k(x,x)=xTxk(\mathbf{x}, \mathbf{x}') = \mathbf{x}^T\mathbf{x}'):

b=13[(13)+(13)+(11)]=63=2b = \frac{1}{3}\Big[ (1 - 3) + (1 - 3) + (-1 - 1) \Big] = \frac{-6}{3} = -2

dove per ciascun nSn \in \mathcal{S} si è calcolato tnwTxnt_n - \mathbf{w}^T\mathbf{x}_n. Il valore coincide con quello trovato prima.

12.5 Esercizio 3: aggiungere e togliere punti#

Traccia. Con riferimento al dataset e alla soluzione dell’esercizio 2 (w=(1,0)T\mathbf{w} = (1,0)^T, b=2b = -2, margine 1), dire che cosa succede alla soluzione nei seguenti scenari, ciascuno considerato separatamente:

  1. si aggiunge il punto (5,0)(5, 0) con classe +1+1;
  2. si aggiunge il punto (1.5,0)(1.5, 0) con classe +1+1;
  3. si rimuove il punto x3=(6,1)\mathbf{x}_3 = (6, 1);
  4. si rimuove il support vector x5=(1,0)\mathbf{x}_5 = (1, 0).

Svolgimento.

Scenario 1: punto nuovo fuori dal margine. Si calcola ty(x)=+1(52)=3>1t \, y(\mathbf{x}) = +1 \cdot (5 - 2) = 3 > 1: il punto è correttamente classificato e strettamente oltre il margine. Il suo vincolo è già soddisfatto dalla soluzione corrente, che quindi resta ottima: la soluzione non cambia e il punto avrebbe α=0\alpha = 0. Non serve riaddestrare.

Scenario 2: punto nuovo misclassificato. Si calcola ty(x)=+1(1.52)=0.5<0t \, y(\mathbf{x}) = +1 \cdot (1.5 - 2) = -0.5 < 0: il punto è misclassificato dalla SVM corrente, quindi bisogna riaddestrare. Il dataset resta linearmente separabile (tutti i negativi hanno x11x_1 \leq 1, tutti i positivi, incluso il nuovo, x11.5x_1 \geq 1.5), quindi la hard margin SVM esiste ancora. I nuovi punti di classi opposte più vicini sono (1.5,0)(1.5, 0) e (1,0)(1, 0), a distanza 0.50.5: il margine non può superare 0.250.25, e viene realizzato dall’asse del loro segmento, la retta verticale x1=1.25x_1 = 1.25. Imponendo i vincoli canonici con w=(w1,0)T\mathbf{w} = (w_1, 0)^T: 1.5w1+b=11.5\, w_1 + b = 1 e (w1+b)=1-(w_1 + b) = 1, da cui 0.5w1=20.5\, w_1 = 2, quindi

w=(4,0)T,b=5,margine=14\mathbf{w} = (4, 0)^T, \qquad b = -5, \qquad \text{margine} = \frac{1}{4}

Verifica rapida degli altri punti: x1=(3,1)\mathbf{x}_1 = (3,1): 125=7112 - 5 = 7 \geq 1; x6=(0,1)\mathbf{x}_6 = (0,1): (05)=51-(0 - 5) = 5 \geq 1; tutti soddisfatti. Il margine è crollato da 11 a 0.250.25 per colpa di un unico punto: se quel punto fosse rumore, la hard margin SVM ne resterebbe deformata. È esattamente lo scenario in cui conviene una soft margin con CC moderato: pagando una slack sul punto anomalo (ξ=1ty(x)=1.5\xi = 1 - t\,y(\mathbf{x}) = 1.5 rispetto al vecchio confine) il modello può mantenere un margine ampio, e per CC sufficientemente piccolo la soluzione soft resta vicina a quella originale trattando il punto come outlier.

Scenario 3: rimozione di un non support vector. Il punto x3\mathbf{x}_3 ha α3=0\alpha_3 = 0 (era stato verificato: t3y(x3)=4>1t_3 y(\mathbf{x}_3) = 4 > 1). La soluzione dipende solo dai support vector, quindi rimuoverlo non cambia assolutamente nulla: stessi w\mathbf{w}, bb, margine e support vector.

Scenario 4: rimozione di un support vector. Rimuovendo x5=(1,0)\mathbf{x}_5 = (1,0) sparisce un vincolo attivo, quindi la soluzione in generale cambia e il margine può solo aumentare o restare uguale. I negativi più vicini diventano x6=(0,1)\mathbf{x}_6 = (0, 1) e x7=(0,1)\mathbf{x}_7 = (0, -1); il dataset resta simmetrico rispetto a x2=0x_2 = 0, quindi si cerca ancora w=(w1,0)T\mathbf{w} = (w_1, 0)^T. Vincoli canonici: per x1,x2\mathbf{x}_1, \mathbf{x}_2: 3w1+b=13 w_1 + b = 1; per x6,x7\mathbf{x}_6, \mathbf{x}_7: (0w1+b)=1-(0 \cdot w_1 + b) = 1, cioè b=1b = -1. Dalla prima: 3w1=23 w_1 = 2, quindi

w=(23,0)T,b=1,margine=12/3=32\mathbf{w} = \left( \tfrac{2}{3}, 0 \right)^T, \qquad b = -1, \qquad \text{margine} = \frac{1}{2/3} = \frac{3}{2}

Il confine si sposta in x1=1.5x_1 = 1.5 e il margine cresce da 11 a 1.51.5. Verifica di x8=(1,0)\mathbf{x}_8 = (-1, 0): 1(231)=531-1 \cdot (-\tfrac{2}{3} - 1) = \tfrac{5}{3} \geq 1, ok; x3,x4\mathbf{x}_3, \mathbf{x}_4: 2361=31\tfrac{2}{3} \cdot 6 - 1 = 3 \geq 1, ok. I nuovi support vector sono x1,x2,x6,x7\mathbf{x}_1, \mathbf{x}_2, \mathbf{x}_6, \mathbf{x}_7.

aggiunta di (1.5, 0) in classe +1punto misclassificato: si riaddestra, margine 0.25vecchio confinex1 = 1.25rimozione del support vector (1, 0)vincolo attivo in meno: il margine sale a 1.5vecchio confinex1 = 1.5

In parole semplici: la soluzione SVM è insensibile a tutto ciò che accade lontano dal confine: aggiungere o togliere punti tranquilli non la muove di un millimetro. È invece sensibile ai punti di frontiera: aggiungerne uno scomodo restringe il margine (o costringe al soft margin), toglierne uno lo allarga.

12.6 Domande teoriche ricorrenti#

Oltre agli esercizi numerici, alcune domande teoriche ritornano spesso; conviene avere pronta la linea di risposta.

Glossario#

Termine Definizione
Sparse kernel machine Metodo kernel la cui soluzione dipende solo da un sottoinsieme dei campioni di training (es. SVM, RVM).
Margine Distanza tra l’iperpiano separatore e il punto del dataset più vicino; nella forma canonica vale 1/w21/\lVert\mathbf{w}\rVert_2.
Classificatore a massimo margine Classificatore lineare che sceglie, tra le separazioni possibili, quella con margine massimo.
Iperpiano canonico Normalizzazione della coppia (w,b)(\mathbf{w}, b) tale che tn(wTϕ(xn)+b)=1t_n(\mathbf{w}^T\boldsymbol{\phi}(\mathbf{x}_n)+b) = 1 sui punti più vicini; elimina le infinite soluzioni equivalenti per riscalamento.
Problema primale Formulazione min12w22\min \frac{1}{2}\lVert\mathbf{w}\rVert_2^2 con vincoli tn(wTϕ(xn)+b)1t_n(\mathbf{w}^T\boldsymbol{\phi}(\mathbf{x}_n)+b) \geq 1; variabili nello spazio dei parametri.
Moltiplicatori di Lagrange (αn\alpha_n) Variabili non negative, una per vincolo, che trasformano il problema vincolato nella lagrangiana; misurano l’importanza di ciascun campione nella soluzione.
Problema duale Riformulazione dell’ottimizzazione nelle sole variabili αn\alpha_n, in cui le feature compaiono solo tramite kernel; da massimizzare con vincoli αn0\alpha_n \geq 0 (o 0αnC0 \leq \alpha_n \leq C) e nαntn=0\sum_n \alpha_n t_n = 0.
Condizioni KKT Condizioni di ottimalità dei problemi convessi vincolati: ammissibilità primale, ammissibilità duale e complementarietà αn(tny(xn)1)=0\alpha_n(t_n y(\mathbf{x}_n)-1) = 0.
Support vector Campione con αn>0\alpha_n > 0: nel margine rigido è un punto esattamente sul margine; nel soft margin anche un punto che viola il margine.
Funzione discriminante y(x)=nSαntnk(x,xn)+by(\mathbf{x}) = \sum_{n \in \mathcal{S}} \alpha_n t_n k(\mathbf{x}, \mathbf{x}_n) + b: somma sui soli support vector.
Bias (bb) Termine costante ricavato dai vincoli canonici sui support vector, in pratica mediando su tutti i support vector per stabilità numerica.
Bound leave-one-out LLOOS/NL_{LOO} \leq \vert \mathcal{S}\vert /N: l’errore leave-one-out è limitato dalla frazione di support vector.
Variabile di slack (ξn\xi_n) Entità della violazione del margine del punto nn: ξn=0\xi_n = 0 nessuna violazione, 0<ξn10 < \xi_n \leq 1 dentro il margine ma classificato bene, ξn>1\xi_n > 1 misclassificato.
Soft margin SVM Variante che ammette violazioni del margine penalizzandole con CnξnC\sum_n \xi_n nell’obiettivo; gestisce dati non separabili e rumore.
Parametro CC Prezzo delle violazioni: CC grande \approx margine rigido (varianza alta), CC piccolo == più regolarizzazione (bias alto); agisce al contrario del λ\lambda della ridge.
Box constraints Vincoli 0αnC0 \leq \alpha_n \leq C del duale soft margin: ogni moltiplicatore è limitato sia sotto sia sopra.
ν\nu-SVM Formulazione alternativa con parametro interpretabile ν\nu: frazione di margin errors ν\leq \nu \leq frazione di support vector.
Chunking Addestramento iterativo su un working set formato dai support vector correnti più i campioni con errore maggiore; il working set può crescere.
Metodo di Osuna Addestramento iterativo con working set a dimensione fissa, aggiornato sostituendo elementi con campioni misclassificati.
SMO Sequential Minimal Optimization: ottimizza analiticamente due moltiplicatori alla volta; iterazioni numerosissime ma quasi gratuite.
One-against-all Decomposizione multi-classe in kk problemi binari sull’intero dataset; in test vince la classe con margine più alto.
One-against-one Decomposizione in k(k1)/2k(k-1)/2 problemi binari su coppie di classi; in test majority voting; l’approccio più accurato.
DAGSVM Variante di one-against-one che in test usa un grafo di decisione: bastano k1k-1 classificatori.
SVM per regressione Estensione con tubo di tolleranza ϵ\epsilon: si penalizzano solo gli errori oltre il tubo; soluzione sparsa e robusta.

Dispensa Machine Learning · Politecnico di Milano